Slight fix to BIOS e820 bug workaround. Remove the check
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 16 Dec 2005 03:57:27 +0000 (04:57 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 16 Dec 2005 03:57:27 +0000 (04:57 +0100)
for whether e820 list is below 1MB: all bootloaders place
it below 1MB so teh check is ineffective and, in any case,
SYSLINUX has the same issue as GRUB (does not pre-initialize
the memory area that e820 function writes to).

Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/setup.c

index 3f97fd867e39ed625e2e62668d24a00a60366a6f..70a22d5a76c240d191da4b7811a4d4abdbb50013 100644 (file)
@@ -315,19 +315,15 @@ void __init __start_xen(multiboot_info_t *mbi)
             memory_map_t *map = __va(mbi->mmap_addr + bytes);
 
             /*
-             * This is a gross workaround for a BIOS/GRUB bug. GRUB does
+             * This is a gross workaround for a BIOS bug. Some bootloaders do
              * not write e820 map entries into pre-zeroed memory. This is
              * okay if the BIOS fills in all fields of the map entry, but
              * some broken BIOSes do not bother to write the high word of
              * the length field if the length is smaller than 4GB. We
              * detect and fix this by flagging sections below 4GB that
-             * appear to be larger than 4GB in size. We disable this check
-             * for mbootpack and syslinux (which we can detect because they
-             * place the mmap_addr list above 1MB in memory).
+             * appear to be larger than 4GB in size.
              */
-            if ( (mbi->mmap_addr < 0x100000) &&
-                 (map->base_addr_high == 0) &&
-                 (map->length_high != 0) )
+            if ( (map->base_addr_high == 0) && (map->length_high != 0) )
             {
                 e820_warn = 1;
                 map->length_high = 0;